package com.jinke.util;

import com.jinke.game.Bullet;
import com.jinke.tank.EnemyTank;
import com.jinke.tank.Tank;

import java.awt.*;

public class TankPool {
    // 对象池(单例模式)
    public static TankPool instance = new TankPool();
    // 对象池最大容量
    private static final int MAX_SIZE = 15;
    // 对象池中的对象
    public EnemyTank[] enemyTanks = new EnemyTank[MAX_SIZE];
    // 对象池中对象是否正在使用
    private boolean[] inUse = new boolean[MAX_SIZE];

    /**
     * 私有化构造器创建对象池,防止外部创建实例
     */
    private TankPool (){
        //先在对象池初始化创建所有敌人坦克对象
        for(int i = 0; i < MAX_SIZE; i++){
            enemyTanks[i] = new EnemyTank(0, 0, 0);
        }
    }

    /**
     * 从对象池中获取敌人坦克对象
     *
     * @param x           坦克的初始x坐标
     * @param y           坦克的初始y坐标
     * @param dir         坦克的初始方向
     * @return 获取到的敌人坦克对象
     */
    public EnemyTank getEnemyObj(int x, int y, int dir){
        for (int i = 0; i < MAX_SIZE; i++){
            if (!inUse[i]){
                inUse[i] = true;
                EnemyTank enemyTank = enemyTanks[i];
                enemyTank.reset(x, y, dir);//重置坦克对象(并不是重新回到0000的状态,而是重新设置属性)
                return enemyTank;
            }
        }
        // 对象池里的对象被拿完了,创建新的子弹对象
        System.out.println("对象池已满,创建新的敌人坦克对象");
        return new EnemyTank(x, y, dir);
    }

    /**
     * 归还坦克对象到对象池
     * @param tank 归还的坦克对象
     */
    public void freeEnemyObj(Tank tank){
        for (int i = 0; i < MAX_SIZE; i++){
            if (tank == enemyTanks[i]){
                inUse[i] = false;//归还对象
                break;
            }
        }
    }
}
